昨天我們學了 Swift 的變數、常數、型別與控制流程。
今天要進一步認識 Swift 裡非常重要的三個觀念:
這些觀念是 Swift 的核心,理解之後能讓程式碼更靈活,也更安全。
函式就像是程式裡的小工廠,能接收輸入、做運算,最後回傳結果。
這樣做的好處是程式碼更有結構,也能重複利用。
基本語法
func sayHello(name: String) -> String {
return "Hello, \(name)!"
}
let message = sayHello(name: "Jack")
print(message) // Hello, Jack!
語法拆解:
func
:用來定義函式sayHello
:函式名稱(name: String)
:參數名稱與型別-> String
:回傳型別return
:回傳的結果func sayHello() {
print("Hello World")
}
sayHello() // Hello World
如果函式只有單行運算,可以省略 return
:
func square(of number: Int) -> Int {
number * number
}
print(square(of: 4)) // 16
在前一項func square(of number: Int)
這裡的 of
其實是 參數標籤 (argument label)。主要的功用是外部呼叫函式時要用這個字。
如果你想呼叫的時候直接寫 square(4)
,可以這樣定義:
func square(_ number: Int) -> Int {
return number * number
}
let result = square(4) // 不需要寫 of
這裡 _
表示「忽略外部參數名稱」。
在 Swift 裡,函式其實是一種特殊的閉包 (Closure)。
閉包可以理解為「匿名函式」,它沒有名字,可以直接當成值來使用。
let greetClosure = { (name: String) -> String in
return "Hello, \(name)!"
}
print(greetClosure("Alice")) // Hello, Alice!
它表示「這個值可能存在,也可能是 nil」。
var name: String? = "Alice"
print(name) // Optional("Alice")
name = nil
print(name) // nil
這裡的 String?
就代表「這是一個 Optional 型別,可能存放一個 String,也可能是 nil」。
因為 Optional 有可能是 nil
,所以在使用前必須「拆箱 (unwrap)」。
使用 !
表示強制拆箱
var name: String? = "Alice"
print(name!) // Alice
但如果值是 nil
,強制拆箱會 程式崩潰:
var name: String? = nil
print(name!) //錯誤:Unexpectedly found nil
我們可以使用預設值的方式來安全取得資料。
var nickname: String? = nil
print(nickname ?? "Guest") // Guest
除了上面兩種還有其他方式
var name: String? = "Alice"
if let unwrappedName = name {
print("Name is \(unwrappedName)")
} else {
print("Name is nil")
}
常用在函式裡,避免巢狀 if 判斷
func printName(_ name: String?) {
guard let unwrappedName = name else {
print("Name is nil")
return
}
print("Name is \(unwrappedName)")
}
今天學到兩個 Swift 的重要概念:
?
宣告這兩個觀念會常常搭配出現,像是:函式的回傳值可能是 nil
,這時候就需要 Optional 來處理。
掌握這些,就能寫出更安全、結構更清楚的 Swift 程式。